# LuckPay Web Manage System
#
# Copyright (c) 2016 Lucky Byte, Inc.
#

$ ->
    # 系统菜单弹出设置
    $('.browse.item.sysmenu').popup
        popup : '.popup.flowing.sysmenu',
        on : 'click',
        lastResort : "bottom right",
        exclusive : true

    # 站内通知弹出设置
    $('.browse.item.notify').popup
        popup : '.popup.flowing.notify',
        on : 'click',
        lastResort : "bottom right",
        exclusive : true

    # 更新所有下拉框的样式
    $('.dropdown').dropdown().css('min-width', '1em')

    # 初始化选择框
    $('.ui.checkbox').checkbox()

    # 初始化所有页面空间中所有控件的 popup
    $('.ui.segment#content *').popup
        exclusive: true
        delay: show: 10, hide: 0

    # 通过日历控件的参数设置选项
    append_calendar_option = (calendar, options) ->
        # 最大可选日期
        max_date = $(calendar).data('maxdate')
        options.maxDate = new Date max_date if max_date

        # 最小可选日期
        min_date = $(calendar).data('mindate')
        options.minDate = new Date min_date if min_date

        # 关联的开始日期控件
        start_with = $(calendar).data('start-with')
        options.startCalendar = $(start_with) if start_with

        # 关联的结束日期控件
        end_with = $(calendar).data('end-with')
        options.endCalendar = $(end_with) if end_with
        return options

    # 初始化日历控件(日期格式)
    $(".ui.calendar.date").each ->
        options =
            type: 'date',
            monthFirst: true,
            today: true,
            firstDayOfWeek: 1
        $(this).calendar append_calendar_option(this, options)

    # 初始化日历控件(日期 + 时间格式)
    $(".ui.calendar.datetime").each ->
        options =
            type: 'datetime',
            ampm: false,
            monthFirst: true,
            today: true,
            firstDayOfWeek: 1
        $(this).calendar append_calendar_option(this, options)

    # 初始化日历控件(时间格式)
    $(".ui.calendar.time").each ->
        options =
            type: 'time',
            ampm: false,
            today: true,
            startMode: 'hour'
        $(this).calendar append_calendar_option(this, options)

    # 避免输入框中按回车提交表单
    $('.ui.segment#content form input')
        .not('.search input').not('.calendar input').not('.submit')
        .bind 'keypress keydown keyup', (evt) ->
            if evt.keyCode == 13
                evt.preventDefault()
                return false

    # 当前用户对当前页面的权限
    page_perms = $('input[name=page_perms]').val()
    window.page_perms = if page_perms then JSON.parse(page_perms) else {}

    # 更新页面布局风格
    all_elements = $('.ui.segment#content .ui')
        .not('.nolayout, .nolayout *').not('option').not('.ui.message')
    compact_elements = all_elements.filter('table.table, button.button')
    switch Cookies.get 'settings.layout_style'
        when 'compact'
            all_elements.removeClass('large').addClass('small')
            compact_elements.addClass('compact')
        when 'normal'
            all_elements.removeClass('small large compact')
        when 'relax'
            all_elements.removeClass('small compact').addClass('large')
        else
            all_elements.removeClass('large').addClass('small')
            compact_elements.addClass('compact')

    # 主机切换
    $('a#host').click (evt) ->
        evt.preventDefault()
        $.post '/hosts/switch', {
            serial: $(this).data('serial'),
            uuid: $(this).data('uuid'),
        }, (resp) ->
            return if not resp.succ
            location.reload(true)

    # 刷新站内通知
    $('i#refresh_notify').click (evt) ->
        evt.preventDefault()
        $(this).addClass 'loading'
        $.post '/notify/refresh', null, (resp) ->
            $('i#refresh_notify').removeClass 'loading'
            return if not resp.succ
            location.reload(true)

    # 更改表单提示信息为中文
    $.fn.form.settings.prompt =
        empty                : '不能为空',
        checked              : '必须勾选上',
        email                : '必须是有效的 EMail 地址',
        url                  : '必须是有效的 URL 格式',
        regExp               : '格式错误',
        integer              : '必须为整数，或介于数值区间的整数',
        decimal              : '必须为带有小数的数字',
        number               : '必须为数字',
        is                   : '必须是 \'{ruleValue}\'',
        isExactly            : '必须精确等于 \'{ruleValue}\'',
        not                  : '不能设置为 \'{ruleValue}\'',
        notExactly           : '不能精确的设置为 \'{ruleValue}\'',
        contain              : '不能包含 \'{ruleValue}\'',
        containExactly       : '不能精确的包含 \'{ruleValue}\'',
        doesntContain        : '不能包含  \'{ruleValue}\'',
        doesntContainExactly : '不能精确的包含 \'{ruleValue}\'',
        minLength            : '至少 {ruleValue} 个字符',
        length               : '必须 {ruleValue} 个字符',
        exactLength          : '长度必须等于 {ruleValue} 个字符',
        maxLength            : '不能多于 {ruleValue} 个字符',
        match                : '必须与字段 {ruleValue} 值一致',
        different            : '必须和字段 {ruleValue} 的值不同',
        creditCard           : '必须是有效的信用卡号',
        minCount             : '至少要选择 {ruleValue} 项',
        exactCount           : '必须选择 {ruleValue} 项',
        maxCount             : '必须选择 {ruleValue} 项或更少'

    # JQuery Ajax 全局处理
    $(document).ajaxComplete (evt, xhr, settings) ->
        if not xhr.responseJSON
            return alert '服务器无响应'
        if not xhr.responseJSON.succ
            alert xhr.responseJSON.errmsg
        if xhr.responseJSON.redirect
            return window.location = xhr.responseJSON.redirect
